package com.summer.common.file;

import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;

/**
 * @author likun
 * 2018/3/15 9:30
 * 文件存储接口，方便做统一的文件存储
 * 如果在分布式的情况下，本地的文件存储就不适用了，
 * 实现该接口可以将文件存储到ftp,hadoop或其他的文件爱你存储系统中去
 **/
public interface FileSystem {

    /**
     * 获取系统路径分隔符
     * @return
     */
    String getPathSeparator();

    /**
     * 写文件
     * @param path
     * @param inputStream
     * @return 传输的字节数
     */
    long write(String path, InputStream inputStream) throws IOException;

    /**
     * 读文件
     * @param path
     * @return
     */
    InputStream read(String path) throws FileNotFoundException;

    /**
     * 删除文件
     * @param path
     * @return
     */
    boolean delete(String path);

    /**
     * 判断文件是否存在
     * @param path
     * @return
     */
    boolean exists(String path);

    /**
     * 判断是否是目录
     * @param path
     * @return
     */
    boolean isDirectory(String path);

    /**
     * 判断是否是文件
     * @param path
     * @return
     */
    boolean isFile(String path);

    /**
     * 返回文件长度
     * @param path
     * @return
     */
    long length(String path);

    /**
     * 返回目录下的所有文件和目录
     * @param path
     * @return
     */
    String[] list(String path);

    /**
     * 创建指定的目录
     * @param path
     * @return
     */
    boolean mkdir(String path);

    /**
     * 创建路径名指定的目录，包括所有必需但不存在的父目录。
     * @param path
     * @return
     */
    boolean mkdirs(String path);

    /**
     * 重命名
     * @param fileName
     * @param newFileName
     * @return
     */
    boolean rename(String fileName, String newFileName);
}
